package Lee_code;

/**
 * @author blh
 * @date 2024年06月30日 16:01
 */
public class Lee_48_630 {
    public void rotate(int[][] matrix) {
        int len = matrix.length;
        // 从外到内遍历, 遍历的层数是len/2
        int layer = len / 2;
        // i 是 layer 层数
        for (int i = 0; i < layer; i++) {
            int[] firstRow = new int[len];
            int[] lastRow = new int[len];
            int[] lastColumn = new int[len];
            int[] firstColumn = new int[len];
            // 给两排赋值
            for (int j = i; j < len - i; j++) {
                firstRow[j] = matrix[i][j];
                lastRow[j] = matrix[len - 1 - i][j];
                firstColumn[j] = matrix[j][i];
                lastColumn[j] = matrix[j][len - 1 - i];
            }
            for (int k = i; k < len - i; k++) {
                // 第一行
                matrix[i][k] = firstColumn[len - 1 - k];
                // 最后一行
                matrix[len - 1 - i][k] = lastColumn[len - 1 - k];
                // 给第一列赋值
                matrix[k][i] = lastRow[k];
                // 给最后一列赋值
                matrix[k][len - 1 - i] = firstRow[k];
            }
        }
    }
}
